<?php


//文件大小单位转换================================
function toSize($size){
    $dw = 'Bytes';
    if($size > pow(2 , 30)){
        $size = round($size/pow(2,30),2);
        $dw = ' GB';
    }else if($size > pow(2,20)){
        $size = round($size/pow(2,20),2);
        $dw = ' MB';
    }else if($size > pow(2,10)){
        $size = round($size/pow(2,10),2);
        $dw = ' KB';
    }else{
        $dw = ' Bytes';
    }
    return $size.($dw);
}
//文件夹大小
function dirSize($dirname){
    $dirSize = 0;
    //打开资源
    $dir = opendir($dirname);
    while($filename = readdir($dir)){
        $file = $dirname .'/'. $filename;
        if($filename != '.' && $filename != '..'){
            if(is_dir($file)){
                $dirSize += dirSize($file);
            }else{
                $dirSize += filesize($file);
            }
        }
    }
    //关闭资源
    closedir($dir);
    return $dirSize;
}
//遍历目录
function dirList($dir){
    $data = array();
    $i = 0;
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                if($file != '.' && $file != '..'){
                    $path = $dir.$file;
                    $data[$i]['filename'] = $file;
                    $data[$i]['path'] = $path;
                    $data[$i]['type'] = filetype($path);
                    $data[$i]['mtime'] = date('Y-m-d H:i:s',filemtime($path));
                    if(is_dir($path)){
                        $data[$i]['size'] = '计算';
                    }else{
                        $info = pathinfo($path);
                        if(array_key_exists('extension',$info)){
                            $data[$i]['parts'] = $info['extension'];
                        }else{
                            $data[$i]['parts'] = 'default';
                        }
                        $data[$i]['size'] = toSize(filesize($path));
                    }
                    $i++;
                }
            }
            closedir($dh);
            foreach($data as $k=>$v){
                $size[$k] = $v['size'];
                $time[$k] = $v['mtime'];
                $name[$k] = $v['filename'];
            }
            //排序
            if($data){
                array_multisort($size,SORT_ASC,SORT_NUMERIC, $data);
            }
        }
    }
    return $data;
}
//删除目录
function delDir($dirname){
    if(file_exists($dirname)) {
        $dir=opendir($dirname);
        while($filename=readdir($dir)){
            if($filename!="." && $filename!=".."){
                $file=$dirname."/".$filename;
                if(is_dir($file)){
                    deldir($file); //使用递归删除子目录
                }else{
                    //echo '删除文件<b>'.$file.'</b>成功<br>';
                    unlink($file);
                }
            }
        }
        closedir($dir);
        //echo '删除目录<b>'.$dirname.'</b>成功<br>';
        rmdir($dirname);
    }
}
//复制目录
function copyDir($dirSrc, $dirTo){
    if(is_file($dirTo)){
        echo "目标不是目录不能创建！";
        return;
    }
    if(!file_exists($dirTo)){
        //创建目录
        mkdir($dirTo);
    }
    $dir=opendir($dirSrc);
    while($filename=readdir($dir)){
        if($filename!="." && $filename!=".."){
            $file1=$dirSrc."/".$filename;
            $file2=$dirTo."/".$filename;
            if(is_dir($file1)){
                copydir($file1, $file2); //递归处理
            }else{
                copy($file1, $file2);
            }
        }
    }
    closedir($dir);
}